package q191_hammingWeight;

public class Solution_1 {
    public static void main(String[] args) {

    }

    /**
     * 统计二进制中有多少个1
     * 最直观的方法就是利用 每一位 n & 1 看是否为1，然后循环32次
     * 但是不能使用while(n != 0)判断，因为Java中负数最高位是1，循环永远不会结束
     * 如果要用while，则要使用逻辑右移
     * 算术右移 >> ：舍弃最低位，高位用符号位填补；
     * 逻辑右移 >>> ：舍弃最低位，高位用 0 填补。
     */
    public int hammingWeight(int n) {
        int count = 0;
        for (int i = 0; i < 32; ++i) {
            count += n & 1;
            n >>= 1;
        }
        return count;

    }
}
